<h1 id="StructureController"><a href="#StructureController" class="headerlink" title="StructureController"></a>StructureController</h1><p><img src="img/controller.png" alt align="right"></p>
<p>占领(claim) 这个建筑来控制其所在的房间。控制器无法被攻击或摧毁。</p>
<p>你可以通过 <a href="#Room.controller"><code>Room.controller</code></a> 属性来快速访问到它。</p>
<table class="table gameplay-info">
    <tbody>
    <tr>
        <th><strong>等级</strong></th>
        <th>升级至下个等级</th>
        <th>降级时间</th>
    </tr>
    <tr>
        <td>1</td>
        <td>200 energy</td>
        <td>20,000 ticks</td>
    </tr>
    <tr>
        <td>2</td>
        <td>45,000 energy</td>
        <td>10,000 ticks</td>
    </tr>
    <tr>
        <td>3</td>
        <td>135,000 energy</td>
        <td>20,000 ticks</td>
    </tr>
    <tr>
        <td>4</td>
        <td>405,000 energy</td>
        <td>40,000 ticks</td>
    </tr>
    <tr>
        <td>5</td>
        <td>1,215,000 energy</td>
        <td>80,000 ticks</td>
    </tr>
    <tr>
        <td>6</td>
        <td>3,645,000 energy</td>
        <td>120,000 ticks</td>
    </tr>
    <tr>
        <td>7</td>
        <td>10,935,000 energy</td>
        <td>150,000 ticks</td>
    </tr>
    <tr>
        <td>8</td>
        <td>—</td>
        <td>200,000 ticks</td>
    </tr>
    </tbody>
</table>

<h3 id="安全模式"><a href="#安全模式" class="headerlink" title="安全模式"></a>安全模式</h3><table class="gameplay-info">
    <tbody>
    <tr>
        <td style="width:60px;"><strong>效果</strong></td>
        <td>阻止本房间中的所有敌对 creep 的 <code>attack</code>, <code>rangedAttack</code>, <code>rangedMassAttack</code>, <code>dismantle</code>, <code>heal</code>, <code>rangedHeal</code>, <code>attackController</code> and <code>withdraw</code> 方法。以及敌对 Power Creep 的 <code>enableRoom</code> 和 <code>usePower</code> 方法。同一时间内只能有一个房间激活安全模式。<br>
    当安全模式被激活时，所有的敌对 creep 都将变透明并且可通过, 您的 creep 可以自由的穿过他们 (反之亦然)。</td>
    </tr>
    <tr>
        <td style="width:60px;"><strong>持续时间</strong></td>
        <td>20,000 ticks</td>
    </tr>
    <tr>
        <td style="width:60px;"><strong>冷却时间</strong></td>
        <td>50,000 ticks (新手区 (Novice Areas) 以及您第一个房间的初始安全模式都没有冷却时间)</td>
    </tr>
    <tr>
        <td style="width:60px;"><strong>获取途径</strong></td>
        <td>
            <ul>
                <li>每次控制器升级时提供一次可用次数</li>
                <li>可以使用 1,000 ghodium 化合物来生成一个可用次数</li>
                <li>控制器降级时将会重置所有可用次数</li>
            </ul>
        </td>
    </tr>
    </tbody>
</table>

<h2 id="StructureController.effects" class="api-property api-property--property  "><span class="api-property__name">effects</span><span class="api-property__type">array</span></h2>
<p>附加的效果，一个包含如下属性的对象数组：</p>
<table><thead><tr><th>parameter</th><th>type</th><th>description</th></tr></thead><tbody>
<tr><td><code>effect</code></td><td>number</td><td><p>该附加效果的 ID。可以是自然效果 ID 或者 Power ID。</p>
</td>
</tr><tr><td><code>level (可选)</code></td><td>number </td><td><p>该附加效果的 Power 等级。如果效果不是 Power 效果则不存在该属性。</p>
</td>
</tr><tr><td><code>ticksRemaining</code></td><td>number</td><td><p>多长时间之后会失去这个效果。</p>
</td>
</tr></tbody></table>

<h2 id="StructureController.pos" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#RoomObject">RoomObject</a></div><span class="api-property__name">pos</span><span class="api-property__type"><a href="#RoomPosition">RoomPosition</a></span></h2>
<p>表示该对象在房间中的坐标的对象。</p>
<h2 id="StructureController.room" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#RoomObject">RoomObject</a></div><span class="api-property__name">room</span><span class="api-property__type"><a href="#Room">Room</a></span></h2>
<p>Room对象的链接。如果对象是标志或工地并且放置在你不可见的房间中，则可能为undefined。</p>

<h2 id="StructureController.hits" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#Structure">Structure</a></div><span class="api-property__name">hits</span><span class="api-property__type">number</span></h2>
<p>当前这个建筑的当前生命值。</p>
<h2 id="StructureController.hitsMax" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#Structure">Structure</a></div><span class="api-property__name">hitsMax</span><span class="api-property__type">number</span></h2>
<p>这个建筑的最大生命值。</p>
<h2 id="StructureController.id" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#Structure">Structure</a></div><span class="api-property__name">id</span><span class="api-property__type">string</span></h2>
<p>一个唯一的对象标识。你可以使用<a href="#Game.getObjectById"><code>Game.getObjectById</code></a>方法获取对象实例。</p>
<h2 id="StructureController.structureType" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#Structure">Structure</a></div><span class="api-property__name">structureType</span><span class="api-property__type">string</span></h2>
<p><code>STRUCTURE_*</code>常量之一。</p>
<h2 id="StructureController.destroy" class="api-property api-property--method api-property--inherited "><div class="api-property__inherited">继承自 <a href="#Structure">Structure</a></div><span class="api-property__name">destroy</span><span class="api-property__args">()</span>
        <div class="api-property__cpu api-property__cpu--A" title="这个方法是一个改变游戏状态的动作。在返回OK代码的情况下，它的自然成本增加了0.2个CPU成本。"></div>
        </h2>
<p>立即摧毁这个建筑。</p>
<h3 id="返回值"><a href="#返回值" class="headerlink" title="返回值"></a>返回值</h3><p>如下错误码之一：
<table class="api-return-codes"><thead><tr><th>constant</th><th>value</th><th>description</th></tr></thead><tbody>
<tr><td><code>OK</code></td><td>0</td><td><p>这个操作已经成功纳入计划。</p>
</td></tr>
<tr><td><code>ERR_NOT_OWNER</code></td><td>-1</td><td><p>你不是这个建筑的拥有者。</p>
</td></tr>
<tr><td><code>ERR_BUSY</code></td><td>-4</td><td><p>敌对creep在这个房间中。</p>
</td></tr>
</tbody></table>
</p>
<h2 id="StructureController.isActive" class="api-property api-property--method api-property--inherited "><div class="api-property__inherited">继承自 <a href="#Structure">Structure</a></div><span class="api-property__name">isActive</span><span class="api-property__args">()</span>
        <div class="api-property__cpu api-property__cpu--2" title="该方法的CPU开销中等。"></div>
        </h2>
<p>检查这个建筑是否可用。如果房间控制等级不足，这个方法会返回false，并且这个建筑会在游戏中红色高亮。</p>
<h3 id="返回值-1"><a href="#返回值-1" class="headerlink" title="返回值"></a>返回值</h3><p>布尔值。</p>
<h2 id="StructureController.notifyWhenAttacked" class="api-property api-property--method api-property--inherited "><div class="api-property__inherited">继承自 <a href="#Structure">Structure</a></div><span class="api-property__name">notifyWhenAttacked</span><span class="api-property__args">(enabled)</span>
        <div class="api-property__cpu api-property__cpu--A" title="这个方法是一个改变游戏状态的动作。在返回OK代码的情况下，它的自然成本增加了0.2个CPU成本。"></div>
        </h2>
<p>切换这个建筑受到攻击时的自动通知。通知会发送到你的账户邮箱。默认开启。</p>
<table><thead><tr><th>parameter</th><th>type</th><th>description</th></tr></thead><tbody>
<tr><td><code>enabled</code></td><td>boolean</td><td><p>是否启用通知。</p>
</td>
</tr></tbody></table>

<h3 id="返回值-2"><a href="#返回值-2" class="headerlink" title="返回值"></a>返回值</h3><p>如下错误码之一：
<table class="api-return-codes"><thead><tr><th>constant</th><th>value</th><th>description</th></tr></thead><tbody>
<tr><td><code>OK</code></td><td>0</td><td><p>这个操作已经成功纳入计划。</p>
</td></tr>
<tr><td><code>ERR_NOT_OWNER</code></td><td>-1</td><td><p>你不是这个建筑的拥有者。</p>
</td></tr>
<tr><td><code>ERR_INVALID_ARGS</code></td><td>-10</td><td><p><code>enable</code>参数不是一个布尔值。</p>
</td></tr>
</tbody></table>
</p>
  
<h2 id="StructureController.my" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#OwnedStructure">OwnedStructure</a></div><span class="api-property__name">my</span><span class="api-property__type">boolean</span></h2>
<p>是否是你拥有的建筑。</p>
<h2 id="StructureController.owner" class="api-property api-property--property api-property--inherited "><div class="api-property__inherited">Inherited from <a href="#OwnedStructure">OwnedStructure</a></div><span class="api-property__name">owner</span><span class="api-property__type">object</span></h2>
<p>建筑拥有者信息，一个包含如下属性的对象：</p>
<table><thead><tr><th>parameter</th><th>type</th><th>description</th></tr></thead><tbody>
<tr><td><code>username</code></td><td>string</td><td><p>拥有者姓名。</p>
</td>
</tr></tbody></table>


<h2 id="StructureController.isPowerEnabled" class="api-property api-property--property  "><span class="api-property__name">isPowerEnabled</span><span class="api-property__type">boolean</span></h2>
<p>该房间是否启用了超能 (power)。使用 <a href="#PowerCreep.enableRoom"><code>PowerCreep.enableRoom</code></a> 来启用超能。</p>
<h2 id="StructureController.level" class="api-property api-property--property  "><span class="api-property__name">level</span><span class="api-property__type">number</span></h2>
<p>当前的控制器等级，从 0 到 8。</p>
<h2 id="StructureController.progress" class="api-property api-property--property  "><span class="api-property__name">progress</span><span class="api-property__type">number</span></h2>
<p>当前控制器升级到下个等级的进度。</p>
<h2 id="StructureController.progressTotal" class="api-property api-property--property  "><span class="api-property__name">progressTotal</span><span class="api-property__type">number</span></h2>
<p>控制器升级到下个等级所需的总进度。</p>
<h2 id="StructureController.reservation" class="api-property api-property--property  "><span class="api-property__name">reservation</span><span class="api-property__type">object</span></h2>
<p>如果控制器被预定，则该对象表示预定的信息:</p>
<table><thead><tr><th>parameter</th><th>type</th><th>description</th></tr></thead><tbody>
<tr><td><code>username</code></td><td>string</td><td><p>预定了该房间的玩家名称。</p>
</td>
</tr><tr><td><code>ticksToEnd</code></td><td>number</td><td><p>预定时间还有多少 tick 结束。</p>
</td>
</tr></tbody></table>

<h2 id="StructureController.safeMode" class="api-property api-property--property  "><span class="api-property__name">safeMode</span><span class="api-property__type">number</span></h2>
<p>安全模式还有多少 tick 结束。没激活安全模式时返回 undefined。</p>
<h2 id="StructureController.safeModeAvailable" class="api-property api-property--property  "><span class="api-property__name">safeModeAvailable</span><span class="api-property__type">number</span></h2>
<p>可用的安全模式激活次数。</p>
<h2 id="StructureController.safeModeCooldown" class="api-property api-property--property  "><span class="api-property__name">safeModeCooldown</span><span class="api-property__type">number</span></h2>
<p>安全模式的冷却时间还有多少 tick。冷却结束前将无法激活安全模式，当安全模式没有冷却时返回 undefined。</p>
<h2 id="StructureController.sign" class="api-property api-property--property  "><span class="api-property__name">sign</span><span class="api-property__type">object</span></h2>
<p>如果控制器被签名，则该对象表示签名的信息：</p>
<table><thead><tr><th>parameter</th><th>type</th><th>description</th></tr></thead><tbody>
<tr><td><code>username</code></td><td>string</td><td><p>将控制器签名的玩家名称。</p>
</td>
</tr><tr><td><code>text</code></td><td>string</td><td><p>签名的文本内容。</p>
</td>
</tr><tr><td><code>time</code></td><td>number</td><td><p>进行签名的游戏 tick 时间。</p>
</td>
</tr><tr><td><code>datetime</code></td><td>Date</td><td><p>进行签名的现实时间。</p>
</td>
</tr></tbody></table>

<h2 id="StructureController.ticksToDowngrade" class="api-property api-property--property  "><span class="api-property__name">ticksToDowngrade</span><span class="api-property__type">number</span></h2>
<p>该控制器还有多少 tick 将要降级。当控制器升级或者降级时, 该计时器将被设置为总降级时间的 50%。可以使用 <code><a href="#Creep.upgradeController">Creep.upgradeController</a></code> 来增加该计时器的时间。控制器想要升级必须先保证该计时器满额。</p>
<h2 id="StructureController.upgradeBlocked" class="api-property api-property--property  "><span class="api-property__name">upgradeBlocked</span><span class="api-property__type">number</span></h2>
<p>还有多少 tick 就能从控制器被攻击从而无法升级的状态中恢复过来。在此期间安全模式也不可用。</p>
<h2 id="StructureController.activateSafeMode" class="api-property api-property--method  "><span class="api-property__name">activateSafeMode</span><span class="api-property__args">()</span>
        <div class="api-property__cpu api-property__cpu--A" title="这个方法是一个改变游戏状态的动作。在返回OK代码的情况下，它的自然成本增加了0.2个CPU成本。"></div>
        </h2>
<pre class="highlight javascript tab-javascript "><code>room<span class="token punctuation">.</span>controller<span class="token punctuation">.</span><span class="token function">activateSafeMode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>激活安全模式 (如果有的话)。</p>
<h3 id="返回值"><a href="#返回值" class="headerlink" title="返回值"></a>返回值</h3><p>如下错误码之一：
<table class="api-return-codes"><thead><tr><th>constant</th><th>value</th><th>description</th></tr></thead><tbody>
<tr><td><code>OK</code></td><td>0</td><td><p>这个操作已经成功纳入计划。</p>
</td></tr>
<tr><td><code>ERR_NOT_OWNER</code></td><td>-1</td><td><p>你不是该控制器的所有者。</p>
</td></tr>
<tr><td><code>ERR_BUSY</code></td><td>-4</td><td><p>已经有其他房间处于安全模式下了。</p>
</td></tr>
<tr><td><code>ERR_NOT_ENOUGH_RESOURCES</code></td><td>-6</td><td><p>没有足够的可用激活次数。</p>
</td></tr>
<tr><td><code>ERR_TIRED</code></td><td>-11</td><td><p>上一个安全模式仍在冷却中，或者控制器正处于 <code>upgradeBlocked</code> 状态，或者控制器的降级计时器已经超过了 50% + 5000 tick 甚至更久。</p>
</td></tr>
</tbody></table>
</p>
<h2 id="StructureController.unclaim" class="api-property api-property--method  "><span class="api-property__name">unclaim</span><span class="api-property__args">()</span>
        <div class="api-property__cpu api-property__cpu--A" title="这个方法是一个改变游戏状态的动作。在返回OK代码的情况下，它的自然成本增加了0.2个CPU成本。"></div>
        </h2>
<pre class="highlight javascript tab-javascript "><code>room<span class="token punctuation">.</span>controller<span class="token punctuation">.</span><span class="token function">unclaim</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>放弃该房间，使得控制器重新变为中立状态。</p>
<h3 id="返回值-1"><a href="#返回值-1" class="headerlink" title="返回值"></a>返回值</h3><p>如下错误码之一：
<table class="api-return-codes"><thead><tr><th>constant</th><th>value</th><th>description</th></tr></thead><tbody>
<tr><td><code>OK</code></td><td>0</td><td><p>这个操作已经成功纳入计划。</p>
</td></tr>
<tr><td><code>ERR_NOT_OWNER</code></td><td>-1</td><td><p>你不是该控制器的所有者。</p>
</td></tr>
</tbody></table>
</p>
